package model.sistema;

import java.util.ArrayList;
import java.util.List;

import model.Publicacion.Pregunta;
import model.Publicacion.Respuesta;
import model.Usuario.Usuario;
import model.Usuario.UsuarioRegistrado;
import model.criterio.criteriosYbusqueda.BusquedaDePreguntas;
import model.criterio.criteriosYbusqueda.Criterio;
import model.insigniaYlogros.Insignia;

public class Sistema {

	private List<Usuario> usuarios;
	private List<Pregunta> preguntas;
	private List<Respuesta> respuestas;
	private List<Insignia> insignias;
	
	public Sistema()
	{
		usuarios=new ArrayList<Usuario>();
		preguntas=new ArrayList<Pregunta>();
		respuestas=new ArrayList<Respuesta>();
		insignias=new ArrayList<Insignia>();
	}
	

	public boolean tieneA(Usuario usuario) {
				
		return usuarios.contains(usuario);
	}

	public void registrarUsuario(Usuario usuario) {
		
		usuarios.add(usuario);
	}

	public void agregarPregunta(Pregunta p) {
		
		preguntas.add(p);
	}
	public void agregarRespuesta(Respuesta r) {
		
		respuestas.add(r);
	}


	public Integer cantidadDeRespuestas() {
		int cant=0;
		for(Respuesta r:respuestas)
		{
			if(!r.estaEliminada())
			{
				cant++;
			}
		}
		
		return cant;
	}
	public Integer cantidadDePreguntas() {
		int cant=0;
		for(Pregunta p:preguntas)
		{
			if(!p.estaEliminada())
			{
				cant++;
			}
		}
		
		return cant;
	}


	public void agregarUsuario(UsuarioRegistrado usuario) {
		
		usuarios.add(usuario);
		   preguntas.addAll(((UsuarioRegistrado) usuario).getPreguntas());
		
		respuestas.addAll(usuario.getRespuestas());
	}


	public Integer cantidadDeUsuarios() {
		
		return usuarios.size();
	}


	public void eliminarPregunta(Pregunta p) {
		
		p.eliminar();
	}

    public void eliminarRespuesta(Respuesta r) {
		
		r.eliminar();
		
	}
    public int cantidadDePreguntasEliminadas(){
    	int cantidad=0;
    	for(Pregunta p:preguntas)
    	{
    		if(p.estaEliminada())
    		{
    			cantidad++;
    		}
    	}
    	
    	return cantidad;
    }
    public int cantidadDeRespuestasEliminadas(){
    	int cantidad=0;
    	
    	for(Respuesta r:respuestas)
    	{
    		if(r.estaEliminada())
    		{
    			cantidad++;
    		}
    	}
    	return cantidad;
    }


	public void actualizarInsigniasPara(UsuarioRegistrado usuario) {
		for(Insignia i:insignias)
		{
			if(i.seCumple(usuario)& usuario.noContieneInsignia(i))
			{
				usuario.agregarInsignia(i);
			}
		}
		
	}


	public void agregarInsignia(Insignia insignia) {
		insignias.add(insignia);
		
	}
	public BusquedaDePreguntas iniciarBusquedaDePreguntasCon(Criterio...criterios)
	{
		List<Criterio> crits=new ArrayList<Criterio>();
		for(int i=0;i<criterios.length;i++)
		{
			crits.add(criterios[i]);
		}
		return new BusquedaDePreguntas(preguntas, crits);
	}


	public int cantidadDeInsignias() {
		return insignias.size();
	}


	public List<Pregunta> getPreguntas() {
		
		return preguntas;
	}


	



	
}
